package com.partvoyage.client.mvp2.view.menu;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.ui.HasWidgets;
import com.partvoyage.client.mvp2.event.CarteZoomEvent;
import com.partvoyage.client.mvp2.event.ChargerProjetEvent;
import com.partvoyage.client.mvp2.event.LoadDataDetailPointEvent;
import com.partvoyage.client.mvp2.event.LoadDataDetailPointEvent.TYPE_DETAIL_POINT;
import com.partvoyage.client.mvp2.event.LoadDataInformationGeneralEvent;
import com.partvoyage.client.mvp2.event.LoadDataInformationGeneralEvent.TYPE_INFORMATION_GENERAL;
import com.partvoyage.client.mvp2.event.LoadDataInformationPointEvent;
import com.partvoyage.client.mvp2.event.LoadDataInformationPointEvent.TYPE_INFORMATION_POINT;
import com.partvoyage.client.mvp2.event.NouveauProjetEvent;
import com.partvoyage.client.mvp2.event.SupprimerPointCourantEvent;
import com.partvoyage.client.mvp2.event.SupprimerTousLesPointsEvent;
import com.partvoyage.client.mvp2.framework.MVPDisplay;
import com.partvoyage.client.mvp2.framework.MVPPresenter;
import com.partvoyage.client.service.projet.ProjetBean;
import com.partvoyage.client.service.projet.ProjetService;
import com.partvoyage.client.service.projet.ProjetServiceAsync;
import com.partvoyage.client.sessionClient.SessionClient;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.menu.Menu;
import com.smartgwt.client.widgets.menu.MenuItem;
import com.smartgwt.client.widgets.menu.events.ClickHandler;
import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent;

public class MenuPresenter extends MVPPresenter<MenuPresenter.Display> {
	protected final ProjetServiceAsync projetService = GWT
			.create(ProjetService.class);

	public interface Display extends MVPDisplay {
		MenuItem getNewItem();

		MenuItem getOpenItem();

		MenuItem getSaveAsItem();

		Menu getOpenSubMenu();

		MenuItem getActiverWikipediaItem();
		
		MenuItem getActiverPhotoPicassaItem();

		Menu getWikipediaMenu();

		Menu getPhotoPicassaMenu();

		MenuItem getSupprimerPointCourantItem();

		MenuItem getSupprimerTousLesPointsItem();

		DynamicForm getFormAdressePourZoom();

		IButton getValidateAdressePourZoom();

		TextItem getAdressePourZoomField();

	}

	public MenuPresenter(final Display display, final HandlerManager eventBus) {
		super(display, eventBus);
		bind();
	}

	protected void bind() {
		display.getNewItem().addClickHandler(new ClickHandler() {

			@Override
			public void onClick(MenuItemClickEvent event) {
				SC.ask("êtes vous sûr de vouloir quitter le projet courant",
						new BooleanCallback() {

							@Override
							public void execute(Boolean reponse) {
								if (reponse) {
									eventBus.fireEvent(new NouveauProjetEvent());
								}
							}
						});
			}
		});
		display.getActiverWikipediaItem().addClickHandler(new ClickHandler() {

			@Override
			public void onClick(MenuItemClickEvent event) {
				String message;
				if (SessionClient.getInstance().estWikipediaActive()) {
					message = "Vous allez activer l'affichage des points wikipedia";
				} else {
					message = "Vous allez désactiver l'affichage des points wikipedia";
				}
				SC.ask(message, new BooleanCallback() {

					@Override
					public void execute(Boolean reponse) {
						if (reponse) {
							SessionClient.getInstance()
									.activateDesactivateWikipedia();
							if (SessionClient.getInstance()
									.estWikipediaActive()) {
								display.getActiverWikipediaItem().setTitle(
										"Désactiver");
							} else {
								display.getActiverWikipediaItem().setTitle(
										"Activer");
							}
							display.getWikipediaMenu().redraw();
						}
					}
				});
			}

		});
		display.getActiverPhotoPicassaItem().addClickHandler(
				new ClickHandler() {

					@Override
					public void onClick(MenuItemClickEvent event) {
						String message;
						if (SessionClient.getInstance().estPhotoPicassaActive()) {
							message = "Vous allez activer l'affichage des photos picassa";
						} else {
							message = "Vous allez désactiver l'affichage des photos picassa";
						}
						SC.ask(message, new BooleanCallback() {

							@Override
							public void execute(Boolean reponse) {
								if (reponse) {
									SessionClient.getInstance()
											.activateDesactivatePhotoPicassa();
									if (SessionClient.getInstance()
											.estPhotoPicassaActive()) {
										display.getActiverPhotoPicassaItem()
												.setTitle("Désactiver");
									} else {
										display.getActiverPhotoPicassaItem()
												.setTitle("Activer");
									}
									display.getPhotoPicassaMenu().redraw();
								}
							}
						});
					}

				});

		display.getSupprimerPointCourantItem().addClickHandler(
				new ClickHandler() {

					@Override
					public void onClick(MenuItemClickEvent event) {
						SC.ask("êtes vous sûr de vouloir supprimer le point courant",
								new BooleanCallback() {

									@Override
									public void execute(Boolean reponse) {
										if (reponse) {
											eventBus.fireEvent(new SupprimerPointCourantEvent());
											eventBus.fireEvent(new LoadDataInformationGeneralEvent(
													TYPE_INFORMATION_GENERAL.TYPE_ALL));
											eventBus.fireEvent(new LoadDataInformationPointEvent(
													TYPE_INFORMATION_POINT.TYPE_NETTOYAGE));
											eventBus.fireEvent(new LoadDataDetailPointEvent(
													TYPE_DETAIL_POINT.TYPE_NETTOYAGE));
										}
									}
								});
					}

				});
		display.getSupprimerTousLesPointsItem().addClickHandler(
				new ClickHandler() {

					@Override
					public void onClick(MenuItemClickEvent event) {
						SC.ask("êtes vous sûr de vouloir supprimer tous les points",
								new BooleanCallback() {

									@Override
									public void execute(Boolean reponse) {
										if (reponse) {
											eventBus.fireEvent(new SupprimerTousLesPointsEvent());
											eventBus.fireEvent(new LoadDataInformationGeneralEvent(
													TYPE_INFORMATION_GENERAL.TYPE_NETTOYAGE_INFO_POINT));
											eventBus.fireEvent(new LoadDataInformationPointEvent(
													TYPE_INFORMATION_POINT.TYPE_NETTOYAGE));
											eventBus.fireEvent(new LoadDataDetailPointEvent(
													TYPE_DETAIL_POINT.TYPE_NETTOYAGE));
										}
									}
								});
					}

				});
		// display.getOpenItem().addClickHandler(new ClickHandler() {
		//
		// @Override
		// public void onClick(MenuItemClickEvent event) {
		// projetService.findAllProjetByUser(SessionClient.getInstance()
		// .getCompteProprietaire().getLogin(),
		// new AsyncCallback<List<ProjetBean>>() {
		//
		// @Override
		// public void onSuccess(List<ProjetBean> result) {
		// List<ProjetBean> list = new ArrayList<ProjetBean>();
		// ProjetBean projetBean = new ProjetBean();
		// projetBean.setNom("topto");
		// list.add(projetBean);
		// ajouterSousMenuOuvir(list);
		//
		// }
		//
		// @Override
		// public void onFailure(Throwable caught) {
		// // TODO Auto-generated method stub
		// System.out.println("" + caught);
		// }
		// });

		// }
		//
		// });
		display.getSaveAsItem().addClickHandler(new ClickHandler() {

			@Override
			public void onClick(MenuItemClickEvent event) {
				// TODO Auto-generated method stub

			}
		});
		display.getValidateAdressePourZoom().addClickHandler(
				new com.smartgwt.client.widgets.events.ClickHandler() {

					@Override
					public void onClick(ClickEvent event) {
						String adresse = (String) display
								.getFormAdressePourZoom()
								.getField("adressePourZoom").getValue();
						eventBus.fireEvent(new CarteZoomEvent(adresse, 13));
					}

				});
	}

	public void ajouterSousMenuOuvir(List<ProjetBean> projetBeans) {
		for (final ProjetBean projetBean : projetBeans) {
			SousMenuOuvrir projet = new SousMenuOuvrir(projetBean.getNom(),
					projetBean.getProjetId());
			// projet.setChecked(true);
			projet.addClickHandler(new ClickHandler() {

				@Override
				public void onClick(MenuItemClickEvent event) {
					eventBus.fireEvent(new ChargerProjetEvent(projetBean
							.getProjetId()));
				}
			});
			display.getOpenSubMenu().addItem(projet);
		}

	}

	@Override
	public void go(final HasWidgets container) {
		container.clear();
		container.add(display.asWidget());
	}

	public void go(Canvas container) {
		container.clear();
		container.addChild(display.asWidget());
	}

	@Override
	protected void registerHandler() {
		// TODO Auto-generated method stub

	}

}
